查看原文
其他

弄清量化金融十大话题 (上)

Mean Machine 王的机器 2019-05-25

引言


前段时间一直在写机器学习方面的文章,有读者私聊想了解一下量化金融。笔者在量化金融方面有 6 年学习经验和 8 年工作经验,做过衍生品定价,估值和风险模型验证,模型风险评估和信用价值调整等,也给一些银行做过知识转移。这些年看过文献,玩过模型,测过风险,算过价值,编过代码,写过报告,听过反馈,讲过小课,却一直没有系统的整理下来。借这个公众号一点点分享出来供大家参考和探讨。


本贴目的是为了揭开量化金融里面十大话题的神秘面纱,把这些听起来复杂内容简单化而激起更多人的兴趣,尤其是那些没有专业背景的读者。这十大话题为


  1. 日期惯例 (date convention)

  2. 插值 (interpolation and extrapolation)

  3. 无套利原则 (no-arbitrage principle)

  4. 等价物, 测度和鞅 (numeraire, measure and martingale)

  5. 随机游走和布朗运动 (random walk and Brownian motion)

  6. 随机微分方程 (stochastic differential equation, SDE)

  7. 伊藤公式 (Itô's formula)

  8. 有限差分方法 (finite difference method, FD)

  9. 蒙特卡洛模拟 (Monte Carlo simulation, MC)

  10. 模型校正 (model calibration)


听起来很炫吗?了解它们需要很深的数学知识吗?不用!你只需要知道下面一些概念和一些基本常识就可以了,前戏开始。


注:十个课题内容太多,分两次讲完,本贴先将前五个。



前戏王 (上)


1. 随机变量 (random variable)


定义:随机变量是指变量的值无法预先确定但以一定的概率取值的量。


例子:丢一个六面骰子得到的点数,记为 X。X 可以等于 1, 2, 3, 4, 5, 6 而且得到每种结果的概率是1/6。


2. 期望和方差 (expectation and variance)


定义:限于随机变量 X,期望是它每次结果的概率乘以其结果的总和,通常用 E[X] 表示;方差是它离期望值之间的距离,通常用 Var[X] 表示。


例子:你丢一次六面骰子,得到点数的期望和方差是多少?


        E[X] = ∑6i=1  i / 6 = 3.5

        Var[X] = ∑6i=1 (i – 3.5)2 / 6 =2.92


注:只有随机变量的期望和方差才有意义,确定变量没有概率这概念,因此它的期望就是它本身,方差为零。


3. 极限 (limit)


定义:如果变量无限地逼近于一个确定的数值,那么该定值就叫做变量的极限。(通常用 lim表示)


例子limx->∞ 1/x = 0


4. 正态分布 (normal distribution)


定义:一个均值是 μ 方差是 s2 的随机变量 X 的分布,记作 X ~ N(μ, s2)。


标准正态分布 (standard normal distribution) 是均值为 0 方差为 1 的随机变量 Z的分布,记作 Z ~ N(0, 1)。Z 和 X 的关系有 X = μ + sZ 。


5. 中心极限定理 (central limit theorem)


定理:大量相互独立的随机变量的均值分布是以正态分布为极限。


有读者可能会说骗人,我才不信你只有上面几个定义和常识就能解释出这十个话题。别慌,下面我就为大家揭开它们的面纱!


注:对于有些话题,和官方定义相比我的解释可能不够严谨或者没有考虑到它们成立需要一些特殊条件,但是我的目的是先要把它们弄懂,而且在应用中,这些特殊条件绝大情况下是成立的。你如果不是专门研究理论而更注重实际应用,那么你根本不需要担心那些特殊条件。(比如一个随机变量是鞅,一个先决条件是它的绝对值的期望一定要是有限的,你几乎在不需要了解这个条件的情况下就可以应用鞅的性质) 



第 1 章 - 日期惯例


1.1 实际估值问题


今天是2016年12月21日 (星期三) ,我在系统里穿机了一单同业存款 (interbank deposit),取出了系统的现值 (present value, PV),并准备自己独立验证一下。该同业存款的特征如下


  • 本金 1,000,000 美元

  • 到期日 3 个月

  • 固定利率 1%

  • 利息计算的日期计数法为 act/360

  • 折现曲线是美元货币市场 (money market) 曲线

  • 折现因子的日期计数法为 act/365


对这笔同业存款的估值步骤如下 (估值日是今天2016年12月21日):


  1. 推算出产品的即期日 (即期惯例):美元利率市场的惯例是 T+2,那么即期日是2016年12月23日 (星期五)


  2. 推算出产品的到期日 (工作日惯例):从即期日后的 3 个月,是 2017年3月23日 (星期四)


  3. 计算利息的年限 (日期计数惯例):从到期日到即期日之间有 93 天,因此利息的年限等于 93/360


  4. 计算折算因子的年限 (日期计数惯例):从到期日到估值日之间 95 天,因此利息的年限等于 95/365


  5. 插出到期日上的零息利率 (插值):根据曲线一组标准期限插出期限为 95/365 对应的零息利率假设为 0.5%


  6. 算出本息 = 本金 + 利息 = 1,000,000  × (1 + 1% × 9 /360)


  7. 算出折现因子 = exp(-0.5%×95/ 365)


  8. 算出现值 = 折现因子× 本息


从前五步可看出,如何推出即期日和到期日,如何计算年限是后面估值的基础。后三小节分别讨论即期惯例,工作日惯例和日期计数惯例,而第二章会讨论插值。



1.2 即期惯例 (spot convention)


在一笔金融产品成交后,交易双方需要在 x 个交易日内办理交割手续。不同市场有不同的即期惯例 T+x,但无外乎 x 等于 0, 1, 2 和 3。下表总结出 T+x 通常适用的市场



注:IBOR, interbank offered rate, 银行同业拆放利率。

 

需要注意的是,即便对于 USD 利率掉期和 USDJPY 远期的惯例都是 T+2,它们也可以用不同的规则来生成即期日。对于利率类,T+2 规则非常简单,就是在估值日后加两个工作日;而对于外汇率,T+2 规则稍微复杂些,比如说估值日后一个日历日即使是美国公众假期,也把它当作工作日。


在做这些产品估值模型验证中,只有这些全部弄清楚了,才能完全复制系统产出,细节决定成败 (the devil is in the details) !



1.3 工作日惯例 (business day convention)


工作日 (business day) 被认为是每周的正式工作的日子。通常对于大多数国家,工作日就是周一至周五,而且不包括公众假期。对于每个国家,公众假期都可能不同,见下图:




上图中公众假期有两种表现形式:


  • 年份用 xxxx (黄色高亮) 标示的指的每年这一天都是公众假期,比如 US 下面 1-Jan-xxxx 就是说每年1月1日都是美国的公众假期。


  • 年份用具体四个数字标示的指的这个具体的日期是公众假期。


工作日惯例就是通过一些不同规定把一个非工作日调整到一个工作日 (非周末且非公众假期) 上。


1.    提前 (preceding)


提前惯例是将非工作日调整成其一天工作日。


例子:2016年12月15日 (星期四) 一个月后是 2017年1月15日 (星期天),调整成一天工作日是 2017年1月13日 (星期五)。此惯例常用在贷款,因此付款通常定在某一天之前。


2.    顺延 (following)


顺延惯例将非工作日调整成其一天工作日。


例子:2016年12月15日 (星期四) 一个月后是 2017年1月15日 (星期天),但是是星期天,调整成一天工作日是 2017年1月16日 (星期一)


3.    修正提前 (modified preceding)


修正提前惯例将非工作日调整成其一天工作日,但是如果这个工作日落在上个月,那么将非工作日调整成其一天工作日。


例子:2016年12月1日 (星期四) 一个月后是 2017年1月1日 (星期天而且是公众假期),调整成一天工作日是 2016年12月30日 (星期五) ,但是已经跨到上个月,因此调整成一个工作日 2017年1月2日 (星期一)。


4.    修正顺延 (modified following)


修正顺延惯例将非工作日调整成其一天工作日,但是如果这个工作日落在下个月,那么将非工作日调整成其一天工作日。


例子:2017年3月30日 (星期四) 一个月后是 2017年4月30日 (星期天),调整成一天工作日是 2017年5月1日 (星期一) ,但是已经跨到下个月,因此调整成一个工作日 2017年4月28日 (星期五)。此惯例常用在利率衍生品上。


5.    月终 (end of month, EOM)


月终惯例是当起始日是某一个月的最后工作日 (注意不是日历日),那么调整后的结束日也要是某一个月最后工作日 (注意不是日历日)。


例子:

  • 2017年2月28日 (星期二) 一个月后是 2017年3月31日 (星期五)

  • 2017年3月31日 (星期五) 一个月后是 2017年4月30日 (星期天),不是工作日,4月最后一个工作日是 2017年4月28日 (星期五)



1.4 日期计数惯例 (day count convention)


年限是将两个日期间的天数按某种规则转化成年数,而日期计数惯例就是这个规则。定义这两个日期为起始日 (其年月日为y1, m1, d1) 和结束日 (其年月日为y2, m2, d2),并解释以下缩写含义:


  • ISDA: International Swap Derivative Association, 国际掉期与衍生工具协会

  • IMCA: International Capital Market Association, 国际资本市场协会

  • ISMA: International Security Management Association, 国际证券管理协会


下面来看看有哪些常见惯例:


1.    1/1


该惯例来自 2006 年 ISDA 文件里面的 4.16(a),年限等于 1


2.    Act/Act


这两个惯例来自 2006 年 ISDA 文件里面的 4.16(b),计算年限方法为“非闰年里天数/365 + 闰年里天数/366”。这里的天数计算包括起始日不包括结束日。该惯例也称为 Act/Act ISDA。


例子:

  • 起始日 2014年12月30日,结束日 2015年1月2日:年限 = 3/365

  • 起始日 2015年12月30日,结束日 2016年1月2日:年限 = 2/365 + 1/366

  • 起始日 2016年12月30日,结束日 2017年1月2日:年限 = 2/366 + 1/365


3.    Act/Act ICMA


该惯例来自 2006 年 ISDA 文件里面的 4.16(c),计算年限方法为 1/freq × adj。其中 freq 是每年付息次数,而 adj 是根据第一个或最后一个票息是短票息或长票息决定的 (四种类型,起始短票息,起始长票息,结束短票息和结束长票息)。由于篇幅有限,就不细讲。


4.    Act/365


该惯例来自 2006 年 ISDA 文件里面的 4.16(d),计算年限方法为 (d2 – d1)/ 365。这里的天数计算包括起始日和结束日。该惯例也称为 Act/365 F。


5.    Act/360


该惯例来自 2006 年 ISDA 文件里面的 4.16(e),计算年限方法为 (d2 – d1)/ 360。这里的天数计算包括起始日和结束日。此惯例通常用在到期日小于一年的货币市场产品 (money market instrument)。



30/360 组


以下 6 到 9 的 30/360 组有以下的共同公式 [公式1]


[360(y2–y1)+30(m2–m1)+(d2–d1)] / 360 


但是用不同方法来决定 y2, m2, d2,  y1, m1, d1。


6.    30/360


该惯例来自 2006 年 ISDA 文件里面的 4.16(f),计算年限方法是用公式1并做以下调整:


  • 当D1是31,将D1变成30。

  • 当D2是31并且D1是30或31,将D2变成30。

  • 如果使用月终惯例,

    • 当D1和D2都是二月最后一个日历日,将D1和D2都变成30。

    • 当D1是二月最后一个日历日,将D1变成30。


该惯例也称为 bond basis,主要用在美国企业债。


7.    30E/360


该惯例来自 2006 年 ISDA 文件里面的 4.16(g),计算年限方法是用公式1并做以下调整:


  • 当D1是31,将D1变成30。

  • 当D2是31,将D2变成30。


该惯例也称为 30/360 ICMA, 30S/360, Eurobond basis 和 Special German。


8.    30E/360 (ISDA)


该惯例来自 2006 年 ISDA 文件里面的 4.16(h),计算年限方法是用公式1并做以下调整:


  • 当D1是某月最后一个日历日,将D1变成30。

  • 当D2是某月最后一个日历日 (如果是二月D2必须是到期日),将D2变成30。


该惯例也称为 30E/360 ISDA 和 German。


9.    30E+/360


计算年限方法是用公式1并做以下调整:


  • 当D1是31,将D1变成30。

  • 当D2是31,将D2变成1且M2变成M2+1。


10.  Bus/252


年限等于包括起始日不包括结束日之间的工作日天数除以 252。该惯例用于巴西市场。



下图给出基本日期计数惯例的总结:





1.5 未来预测


推算和计数日期搞得这么复杂对宽客 (quant) 是好事,弄太简单了显不出他们懂得多做得细,我也把所有这些惯例用 matlab 实现而且和几个数据商的产出进行了比对。所有东西看起来是很美,讲起来也一套一套的,但是随着全球市场一体化,IT 技术日新月异,这种惯例会一直存在吗?下面是我的一些大胆猜想:


即期日惯例:在 Don Tapscott 和 Alex Tapscott 的区块链革命 (Blockchain Revolution) 一书第三章写到“交易员买卖股票只需纳秒 (10-9秒),此交易却要花三天结算 (Traders buy and sell securities on the world’s stock exchanges in nanoseconds; their trades clear instantly but take three full days to settle)”。这么长时间结算主要花在一些身份文件和金融交易的证实工作上,以后区块链技术就是可以帮助交易对手在一个安全的环境里证实双方身份,买卖金融产品加结算应该在瞬时完成,我觉得那些即期日包括外汇即期日,掉期即期日和股票即期日等都不会存在了。


工作日惯例:当今几乎金融产品的付息日都调整在工作日上,原因是处理利息的机构在非工作日上不办公。试想以后所有这些产品结算都是机器运行,而机器是永不停息的,对它们来讲,每天都是工作日,不需要任何调整。


日期计数惯例:当时的市场不像今天那么大而且相互关联,而且原来也没有计算机。很多在那个时候定下的日期计数惯例,比如“30/360”,虽然对于程序员编起来有些“困难”,但对交易者和投资者都有巨大的好处。年限说白了就是为了算利息的,我对利息的看法是在投资期间持续给定时间量时赚取相同的金额,因此所有日期计数定为 Act/Act 比较合理,此外现在市场大而关联,而且都是用计算机计算利息的,因此日期计数这个惯例会趋向趋同。



想想一个金融市场,所有交易瞬时结算(区块链证实交易双方身份),所有付息日不需要任何调整 (机器无时无刻做工),只有一种计数惯例 (只要所有机构同意规范化),这是多么简单美好的市场啊!当技术实现以机代人的时候,当人类找到化繁为简的真谛,对宽客来讲,这是一个最好的结局,这是一个最坏的结局。



第 2 章 - 插值


在量化金融中最普遍的问题就是 a) 拟合给定的数据集合 b) 获取任何点对应的数据。应用例子有:


  • 从收益率曲线 (一维) 中插出折现率

  • 从波动率平面 (二维) 插出波动率

  • 数值积分,用分段函数来表示复杂的函数


我们可以精确的拟合干净数据,就是插值;也可以近似的拟合噪声数据,就是回归。在本章要讲的是前者。此外数据可以是


  • 单变量:随时间的折现因子或期货价

  • 双变量:随行权价和时间的期权波动率


我们着重讨论单变量数据的插值。插值就是通过已知的离散数据求未知数据的方法。插值包括内部插值和外部插值。


2.1 内插 (interpolation)


和机器学习里的回归用的数据不同的是,金融市场数据对象的插值问题用到的数据是没有噪声的和少量的,下图所示的是一条折现曲线的数据




上图第二列对应的是零息利率,这些数值都是根据市场交易的金融产品比如同业存款 (interbank deposit),利率期货 (Eurodollar futures) 和利率掉期 (interest rate swap, IRS) 而引导 (bootstrap) 出来的。如果你认为这些交易的产品数据没有噪声,那么由其引导出的零息利率也没有噪声。此外,该数据只有 28 个,远比机器学习里一套训练数据少,那些数据个数成千上万很正常。


如果数据少,理想做法是完美的拟合所有已知数据,明显线性插值不适合了,但为什么市场上那么多的线性做法呢?这里面有个非常微妙的措词,我很奇怪为什么大家已开始都不说清楚就推断对方都懂吗?所有量化金融里面说的插值是分段 (piecewise) 插值!上面 28 个点线性插值不是说一条直线拟合 28 个点,这样不可能完美拟合全部点嘛。但是分段线性插值就可以完美解决这个问题,因为 28 个点,有 27 段 (不考虑外插) 或 29 段 (考虑外插),每一段首尾两个点,可以连一条直线,全部点之间连起来不就是分段线性插值吗?接下来我们来讨论量化金融里用的最多的几种内插方法 - 分段常函数,分段线性函数和分段三次样条函数。


首先给出数学符号。给定 N 数据点 (xi, fi), i = 1, 2, …, N,其中 x1 < x2 < ... < xN 。我们希望找到一个函数 f(x) 来拟合这 N 个数据点,对于分段函数,因为有 N 个数据点,需要 N -1 段函数。


分段常 (piecewise constant) 函数




在这种情况,每一段函数都是一个常数,这种插值方法

 

  • 优点是简单

  • 缺点是在数据点上不连续,更不可导

  • 适用于在某些模型的参数 (比如 Heston 模型中的均值回归率和波动率的波动率) 上插值 (模型参数通常只用常数和分段常函数,但后者比前者能更好的拟合市场数据,因为它有更多自由度)。

  • 不适用于曲线和波动率插值


分段常函数不连续,通常称作 C-1 函数。


分段线性 (piecewise linear) 函数




在这种情况,每一段函数都是一个线性函数,这种插值方法


  • 优点是简单,在数据点上连续,而且形状保持性很好 (插出的值只和它相邻两个数据点有关,别的数据怎么动都不影响它的插值)

  • 缺点是在数据点上不可导

  • 适用于曲线和波动率插值

  • 不适用于在 Hull-White 模型下的曲线插值 (Hull-White 模型需要对曲线求二阶导)


分段线性函数连续但是不可导,通常称作 C0 函数。


分段三次样条 (piecewise cubic spline) 函数




在这种情况,每一段函数都是一个三次多项式函数,这种插值方法


  • 优点是在数据点上可导甚至可导三次 (非常平滑)

  • 缺点是有些复杂,而且形状保持性不好 (插出的值和整个数据点有关,别的数据动以下都会影响它的插值)

  • 适用于曲线的插值


分段三次样条函数连续而且二阶可导,通常称作 C2 函数。



讲到这里细心的同学可能会发现,怎么没有连续而且一阶可导的 C1 函数?有的,它是分段埃尔米特 (piecewise Hermite) 函数。它和三次样条函数一样,每段都是一个三次多项式函数,但是在节点( 数据点)上的连接导数设置有所不同,埃尔米特函数就只处理了一阶导数。


从分段常函数到分段线性函到分段三次样条函数,内插出来的值化成函数看起来越来越光滑 (可导性越来越好),但是形状保持性越来越差 (局部性越来越差)。当我们选择那种方法插值时,我们需要权衡插出曲线的局部性 (locality) 和可导性 (differentiability)。


下表总结四种内插函数





2.2 外插 (extrapolation)


有时候我们需要知道数据外的情况,比如一条折现曲线最长年限是 10 年,现在你需要对一个30年的产品进行估值,那么就需要外插出 30 年对应的折现率了。


外插用的最多就是平外插和线性外插,下图一目了然的展示了这两种外插的特点。



从上图可以看出,当边界斜率很陡时,线性外插 (黑色实线) 容易得到很大或很小的值,这在量化金融里是不希望看到的。比如你有 9 年和 10 年的利率是 3% 和 2%,这种情况下线性外插 30 年利率为 -18%,毫无意义。但如果是平外插的话,30 年利率和 10 年利率一样也是 2%,虽然不是很精确给予已知的信息,这也是不错的猜测了。

 

此外,在三次样条 (cubic spline) 插值里有更为复杂的外插,三种不同的外插设置描述如下:

 

  1. 自然样条 (natural spline):首尾两端点的两阶导为零,f1’’(x1) = fN-1’’(xN) = 0。“自然”直观含义是首尾两端没有受到任何让它们弯曲的力。


  2. 固定样条 (clamped spline):首尾两端点的一阶导为指定值,f1’(x1) = a, fN-1’(xN) = b。“固定”直观含义是首尾两端的延展方向由两端的斜率固定。


  3. 非节点样条 (not-a-knot spline):首尾两端点的三阶导为其邻点的三阶导,f1’’’(x1) = f2’’’(x2),  fN-2’’’(xN) = fN-1’’’(xN-1)。“非节点”直观含义是第二个和倒数第二个节点处的三阶导数连续,即要求前两个和最后两个相邻区域使用相同的三次函数,让前三个点确定一个三次多项式,最后三个点确定一个三次多项式。这个时候由于第二个和倒数第二个节点已经不是两个不同三次曲线的连接点了,所以被称为非节点。注意 matlab 里面默认的三次样条函数就是这个。



2.3 实际应用


说到底,插值就是一种近似方法,没有绝对的对或错,因为市场上现有的就是那些已知数据,从已知推到未知都需要自己的假设和模型的要求。但一些通用准则需要留意:

 

  • 除非你使用的模型对市场数据光滑度要求很高,否则一般用局部性好的插值方法,比如线性。在你计算利率曲线敏感度时,你不希望动 30 年点的数据影响你在1.3 年插出的利率。


  • 插值不能破坏一些基本市场规律,比如远期波动率不能为负值。为保证这个,通常在时间维度是用线性函数在方差而不是波动率插值。


  • 外插用平插最保险,它可以避免你得到一个很高的利率或负波动率。



第 3 章 - 无套利原则


官方定义:Arbitrage is the practice of taking advantage of a price difference between two or more markets: striking a combination of matching deals that capitalize upon the imbalance, the profit being the difference between the market prices. No arbitrage principle is to assume the market prices do not allow for profitable arbitrage.


什么鬼?


我的理解:无套利原则就是“如果两个资产的未来的支付函数相同,那么它们的现值相同”。天下没有免费的午餐,想未来收获多点现在就付出多点。


以下给出简单证明:


假设两个资产 A 和 B,在时点 T 时的支付函数是 f 和 g 而且 f = g,如果 A 不等于 B,那么


  1. 当 A > B 时:在 0 点买低价 B 卖高价 A,获益 A – B (因为 A – B > 0),而在 T 点损益为 0 (因为 f – g = 0),有套利机会


  2. 当 A < B 时:在 0 点买低价 A 卖高价 B,获益 B – A (因为 B – A > 0),而在 T  点损益为 0 (因为 f – g = 0),有套利机会


综上所述,只有 A = B 时,才没有套利机会。


无套利原则的应用太广了,量化金融里处处都是它的影子,我们从最最简单的情况开始。首先做下面以下假设:


  1. 世界上只有两个基本资产,有风险的股票和无风险的现金

  2. 市场上的金融产品都只能在 0 时点和 T 时点交易的

  3. 股票在 T 时点只能涨和跌,是涨是跌是不确定的

  4. 现金在 T 时点会生成利息,这是确定的


现在我们就可以对任何一个金融产品进行估值,用的就是无套利原则。


沿用上面的符号,我们用 A 来表示一个股票 S 和现金 C 的组合,例如借 x 单位现金买 y 单位股票;用 B 来表示金融产品 B。在 0 时点和 T 时点组合 A 和金融产品 B 的现值 A0B0 和支付函数 ATBT




如果我们用组合 A 来复制金融产品 B 的支付函数,因此有




根据无套利原则,当 AT = BTA0 = B0




已知 u > d,当 u > (1+r)T > d 时,pupd 可看成概率因为它们都严格大于 0 而且加总为 1。条件 u > (1+r)T > d 也合情合理,因为你可以用一定金额买股票或生利息,如果上面条件不成立


  • 当 u > d > (1+r)T 时,股票涨跌都比现金回报高,那么每个人都买股票了

  • (1+r)T > u > d 时,股票涨跌都没现金回报高,那么没有人买股票了


以上两种市场状态都不现实,因此 u > (1+r)T > d 成立。所以根据无套利原则,金融产品 B 的现值为所有情景下的支付函数的期望再乘上折现因子。比如对于看涨 (看跌) 期权,我们可以很快的写出它们的估值公式。


看涨期权 c 是用行权价格 K 来买原生资产比如股票 S 的权利,支付函数为

    

    h(S) = max(S – K, 0) = (S – K)+


其现值为

    

c = [pu∙(uS0–K)+ + pd∙(dS0–K)+] / (1+r)T


看跌期权 p 是用行权价格 K 来卖原生资产比如股票 S 的权利,支付函数为

    

    h(S) = max(K – S, 0) = (K – S)+


其现值为


p = [pu∙(K– uS0)+ + pd∙(K–dS0)+] / (1+r)T

  

我知道该模型过于简单,该模型推广多资产多情景多期交易日也可以推出在无套利原则下对某个金融产品的估值公式

    

    现值 = 折现因子× 支付函数的期望


这正是一个金融产品的风险中性 (risk neutral) 估值公式。在风险中立的世界,所有投资者的预期回报都是无风险利率 (risk-free rate) r。因此,产品现值可以通过以无风险利率折现其预期收益而获得。



第 4 章 - 等价物, 测度和鞅


4.1 等价物 (numeraire)


官方定义:A numeraire is a tradeable economic entity in terms of whose price the relative prices of all other tradeable assets are expressed.


什么鬼?


我的理解:等价物就是单位。


  • 一台苹果手机价值 1,000 新币,这时等价物是新币

  • 一辆马自达三价值 90,000 新币,这时等价物也是新币

  • 一辆马自达三价值 90 台苹果手机,这时等价物是苹果手机


大家可能会问,有人会傻到用苹果手机衡量马三的价值吗?的确不会,但是如果是下面这种情况呢?


  • 一个简单产品价值 1,000 新币,这时等价物是新币

  • 一个复杂产品很难直接用新币估值,但是有种方法可以快速得到它和简单产品之间的关系

  • 通过一些数学转化,得到复杂产品价值 1.5 倍简单产品,这时等价物是简单产品,而且可得复杂产品价值 1,500 新币


在金融产品估值时,选择某种等价物会大大简化其估值过程。而选择哪种就等价物需要经验了,常见的等价物有活期存款 (bank account),零息债券 (zero-coupon bond) 和年金 (annuity)。



4.2 概率测度 (probability measure)


官方定义:A probability measure is a real-valued function defined on a set of events in a probability space that satisfies measure properties such as countable additivity.


什么鬼?


我的理解:概率测度就是不同状态下的概率集合。


当你投一枚硬币看正反面


  • 如果你认为硬币是公平的,那么 P(正)= P(反) = 0.5,P 就是一个概率测度。

  • 如果你认为硬币是不公平,正面比反面出现的次数多很多,大概 8 比 2 的样子,那么 Q(正)= 0.8 和 Q(反) = 0.2,Q 也就是一个概率测度。


这个壮态就是硬币是否公平。但是金融产品估值时,我们更关心的是用某个资产生成的概率密度。下面是整个故事的来龙去脉。


假设明天天气有三个状态,晴、阴、雨,以及预测三个状态发生的概率,50% 晴天,30% 阴天和 20% 雨天。现在我为你定制一个产品,它明天晴天时付你 1 元,阴天时付你 3 元,雨天时付你 2 元,你愿意以多少钱买这个产品?很简单,算出该产品未来价值的期望即可:


    价值 = 50%×1 + 30%×3 + 20%×2 = 1.8

    

如果我以高于 1.8 元的价格卖给你这个产品,你不会向我买因为它高过你对它的期望价值;如果你以低于 1.8 元的价格向我买这个产品,我不会卖给你因为它低过我对它的期望价值。(为了举例简单,我们没考虑一天的折现因子,要知道明天的 1 块钱没有今天的 1 块钱值钱,好像也不对,现在负利率在瑞士和欧洲还蛮普遍的)


将上面“明天天气有 3 个状态”的例子扩展到“明天世界有 K 个状态”的例子,并把每个状态的折现因子也考虑进来。考虑两个资产 A 和 B ,类比上面公式 (或者根据上节讲的无套利原则推出的公式) 我们有:



其中

            A(0), B(0) = 今天的价值

            Ak(T), Bk(T) = T 时状态 k 下的价值

            φk = 在 T 时$1在状态 k 下的现值

                 = 状态 k 发生的概率 × 折现因子

 

把 B 当成 A 的等价物,我们有




根据 πk 的表达式,我们观察到以下两点:

 

  1. 它严格大于 0 而且其总和为 1,因此可把一系列 πk 看成是一个概率测度

  2. 它里面只有 B 没有 A,所以此概率测度是由等价物资产 B 生成出来的。

 

将上式整理一下得到




其中 EB 代表在“由等价物资产 B 生成出来的概率测度”下的期望。这个公式强大之处是选择 B 的自由度。例如我们要估值资产 A 的价值,对某一个等价物 B 来说,在它生成的概率测度下求 Ak(T)/Bk(T) 特别简单,那么我们就把 B 当做等价物。


从上式还能得到一个结论,通常就是一个等价物对应着一个概率测度,上一节得知常见的等价物有活期存款,零息债券和年金,它们对应的测度和估值应用到的金融产品见下表:





4.3 鞅 (martingale)


官方定义:A martingale is asequence of random variables for which, at a particular time inthe realized sequence, the expectation of the next value in the sequence is equal to the present observed value even given knowledge of all prior observed values.


什么鬼?


我的理解:当 X 在 s 时的值等于未来 t 时的值的期望,X 是鞅。数学公式就是 Es[X(t)] = X(s),其中 Es 指的是在时点 s 取期望。


回忆上一小节结尾的公式


根据鞅的定义,我们得知 A(t)/B(t) 在 B(t) 做等价物的测度下是一个鞅。在很多情况下金融产品的支付函数和市场变量有关,比如


    利率上限支付函数 = (L – K)+

    掉期期权支付函数 = (S – K)+

 

其中 L 和 S 都是市场变量,分别叫做“同业拆放利率”和“掉期利率”。好就好在这两个市场变量都可以分解成 A/B 的形式。

    

    L = 零息债组合/零息债 = A/B

    S = 零息债组合/年金 = A/B

 

同业拆放利率在零息债是等价物的测度 (远期测度)下是鞅,因此只要是支付函数里面有同业拆放利率(比如利率上限、下限、区间计息累积掉期等),我们就想方设法的把测度转换到远期测度。同理,掉期利率在年金是等价物的测度 (掉期测度)下是鞅,因此只要是支付函数里面有掉期利率 (比如掉期期权、固定期限掉期等),我们就想方设法的把测度转换到掉期测度。如何转换测度看下节。


4.4 测度转换 (change of measure)


在 4.2 节最后得知,通常就是一个等价物对应着一个概率测度,换测度就是换等价物。这节我们想弄清楚的东西有三个:

 

1.    两个测度之间的概率联系是什么?

2.    两个测度之间的等价物联系是什么?

3.    为什么要变换测度?


测度之间的概率联系

 

还是用投硬币的例子,公平硬币的概率测度为 P(正) = P(反) = 0.5;不公平硬币的概率测度为 Q(正) = 0.8 和 Q(反) = 0.2。假设 P 和 Q 是等价的,意思就是 P 和 Q 一起同意什么事件是一定发生的和什么事件是不可能发生的,例如

 

P(硬币竖起来) = Q(硬币竖起来) = 0       [不可能]

P(正面或反面) = Q(正面或反面) = 1       [一定]

 

那么 P 和 Q 之间有联系吗?有!

 

假设投硬币是正面你得 1 块钱 (用 x1 表示),反面你得 2 块钱 (用 x2 表示),问你愿意出多少钱玩?算出期望值不就可以了,假设你认为硬币是公平的,用 p1p2 来代表 P(正) 和 P(反),q1q2 来代表 Q(正) 和 Q(反),那么期望为



其中 Z = P/Q 也是个随机变量有

 

    Z1 = p1 / q1 = 0.5/0.8 = 0.625

    Z2 = p2 / q2 = 0.5/0.2 = 2.5

    EQ[Z] = q1 ∙ (p1/q1) + q2 ∙ (p2/q2) = 1

 

从上式看出,一开始我们是在 P 测度下计算 X 的期望值,而到最后我们转到的 Q 测度。奇妙之处是我们用 Q 测度可以算 P 测度的值,唯一需要知道的是 Z 的表达形式。在概率论,这个 Z 叫做拉东-尼科迪姆导数 (Radon-Nikodym, RN derivative),通常用 dP/dQ 来表示。


测度之间的等价物联系


假设我们有资产 N 和 U,它们对应的概率测度为 QNQU。回忆 4.2 结尾的公式和类比上节测度转换公式




将 N 和 U 当成等价物类比公式2里 B 的角色,以及将 N 和 U 类比公式3里 P 和 Q。从中间 A(0)/N(0) 出发向两边证明(见箭头),我们有:




我们发现头尾都是在 QU 测度下的表达式,将头尾期望括号里面的表达式相等,得到




换测度的好处


在量化金融中,我们关注的是公式4。换测度的好处体现于在对金融产品估值时,选择适当的测度 (等价物) 会大大简化推导过程。看下表的例子 (先不管推导,重点在最后一行)




下面你们来说,你愿意用哪个测度呢?远期测度是吧。看看期望的中括号里的项,风险中性测度下有两项,如果 V(T) 和 β(T) 之间还有相关性,那么往后的推导会变得非常不友好 (两维问题);而远期测度下只有一项,只要我们把 V(T) 在该测度下的分布写出,往后的推导就是一个简单的一维问题。你被说服了吗?



第 5 章 - 随机游走和布朗运动

 

随机游走布朗运动本质是一样的,前者是离散的,后者是连续的。求极限可以把离散概念和连续概念联系起来,因此随机游走的极限版本就是布朗运动离散概念和连续概念你要先弄懂哪个?当然离散概念了,没学会走就要学跑了是吗?让我们先看看随机游走吧。


5.1 随机游走 (random walk)


官方定义:A random walk is a mathematical object which describes a path that consists of a succession of random steps.


什么鬼?


我的理解:投硬币,硬币正反面出现的概率都是 50%。你丢个正面获益 1 块钱丢个反面损失 1 块钱。丢硬币 k 次之后你的损益就是随机游走。下图显示出一种随机游走的路径。




硬币被抛出 k 次会生成 k 个独立且相同分布 (independently and identically distributed, IID) 的随机变量 a1, a2, …, ak 的序列。定义 Mk 为此序列的和 Mk = a1 + a2 + … + ak,初始值 M0= 0,该过程 M 是随机游走。现在让我们研究一下随机游走的性质吧。




根据上图的简单证明,我们得到以下 4 个性质:


  1. Mk 期望为 0,方差为 k

  2. 增量 MkMk-1, …, M1 M0 相互独立

  3. MiMj 期望为 0,方差为 i – j 假设 i > j

  4. Mi 是个鞅过程,Ej[Mi] = Mj 假设 i > j


其中 Ej 指的是在 j 时取期望。


构建和学习完随机游走之后,我们可以通过随机游走来构建布朗运动,见下图:




其中最关键的一步 (天蓝框) 是利用中心极限定理推出了被 k 平方根规范化的随机游走服从 (当 k 趋近无穷) 一个标准正态分布 (有兴趣的同学可以用距生成函数, moment generating function 来证明,不难)。在用粉红框里面的构建函数取极限得到布朗运动 B(t),它服从一个均值为 0 方差为 t 的正态分布。

 

5.2 布朗运动 (Brownian motion)


官方定义:Brownian motion the random motion of particles suspended in a fluid resulting from their collision with other fast-moving particles.

 

什么鬼?

 

我的理解:布朗运动就是规范化连续版的随机游走。


以下是布朗运动的定义

 

  • B(0) = 0

  • B(t) 是连续的

  • 增量 B(tk) – B(tk-1), B(tk-1) – B(tk-2), …, B(t2) – B(t1) 和 B(t1) – B(t0) 相互独立

  • 假设 s < t,增量 B(t) – B(s) 服从均值为 0 方差为  t – s 的正态分布,记作 B(t) –B(s) ~ N(0, t – s)

 

第三个“独立增量”和第四个“正态增量”都可以很容易从上一小节从随机游走构建布朗运动的过程中得到。此外,因为随机游走是鞅,那么类比布朗运动也是鞅,证明如下:


    Es[B(t)] = Es[B(t) – B(s) + B(s)]

                  = Es[B(t) – B(s)] + Es[B(s)]

                  = 0 + Es[B(s)]

                  =B(s)

 

一张表总结本章:





总结


量化金融不难:


  • 日期:多看 ISDA 文件,一次性弄懂即期日惯例、工作日惯例和日期计数惯例,虽然我大胆预测以后不需要这些了。

  • 插值:自己编写程序实现至少线性和三次样条插值。

  • 无套利原则:天下没有免费的午餐,你未来想得到多些现在就要付出多些。通常用无套利原则开始能推出金融产品在风险中性测度的估值公式。

  • 概率测度:从风险中性测度开始,选择合适的等价物转换测度使得以后的公式推导简单畅快。

  • 布朗运动:整个量化金融的核心,后面随机微分方程,伊藤公式,偏微分方程和蒙特卡洛都需要它!但它其实就是个正态分布随机变量。


上半部就先讲这么多。Stay Tuned!



    您可能也对以下帖子感兴趣

    文章有问题?点此查看未经处理的缓存